package juego.Persistencia;

import java.io.File;


import java.util.ArrayList;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

import juego.Jugador;
import juego.Dificultad.Dificultad;
import juego.Tablero.PuntoInterseccion;
import juego.Tablero.Tablero;


public class PersistenciaDeJuego {
	
	private Guardado guardadoInterno;
	
	public String crearRutaAPartirDeNombre (String jugador){
		
		String ruta = "C:\\Persistencia\\";
		ruta.concat(jugador);
		ruta.concat(".xml");
		return ruta;
	}
	
	public void buscarJugador (String jugador){
		
		String direccion = crearRutaAPartirDeNombre (jugador);
		Guardado guardado = new Guardado();
		File XMLfile = new File(direccion);
		if (XMLfile.exists()){
			try {
				JAXBContext jaxbGuardado = JAXBContext.newInstance(Guardado.class);
				Unmarshaller jaxbUnmarshaller = jaxbGuardado.createUnmarshaller();
				guardado = (Guardado) jaxbUnmarshaller.unmarshal(XMLfile);
			} catch (JAXBException e) {
				   e.printStackTrace();
			}
		}
		this.guardadoInterno = guardado;
	}
	
	
	public void guardar (Jugador jugador, Dificultad dificultad, Tablero tablero, int puntaje) {
		Guardado aGuardar = new Guardado();
		aGuardar.setJugador (jugador.getNombreJugador());
		PartidaGuardada partida = new PartidaGuardada();
		partida.setDificultad (dificultad.getIdentificador());
		partida.setVehiculo (jugador.getVehiculo().darSuNombre());
		partida.setPosicion (tablero.darPosicionVehiculo());
		partida.setMeta (tablero.darPosicionLlegada());
		partida.setMovimientos(jugador.getCantidadDeMovimientos());
		aGuardar.setPartida (partida);
		buscarJugador(jugador.getNombreJugador());
		ArrayList <Integer> listaDePuntajes = new ArrayList <Integer>();
		if (puntaje!=0) listaDePuntajes.add(puntaje);
		aGuardar.setPuntaje(listaDePuntajes);
		
		try {
			JAXBContext jaxbGuardado = JAXBContext.newInstance(Guardado.class);
			Marshaller jaxbMarshaller = jaxbGuardado.createMarshaller();
		
			String direccion = crearRutaAPartirDeNombre (jugador.getNombreJugador());
			File XMLGuardado = new File(direccion);
		
			jaxbMarshaller.marshal(aGuardar, XMLGuardado);
		} 
		catch (JAXBException e) {
		   e.printStackTrace();
		}

	}
	
	public String getVehiculoGuardado () {
		return this.guardadoInterno.getPartida().getVehiculo();
	}
	
	public int getMovimientosGuardados () {
		return this.guardadoInterno.getPartida().getMovimientos();
	}
	
	public String getDificultadGuardada () {
		return this.guardadoInterno.getPartida().getDificultad();
	}
	
	public PuntoInterseccion getMetaGuardada () {
		return this.guardadoInterno.getPartida().getMeta();
	}
	
	public PuntoInterseccion getPosicionGuardada () {
		return this.guardadoInterno.getPartida().getPosicion();
	}
}
